<?php

require_once 'classes/Habitation.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Habitations
 */
class SChabitation{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une habitation
    * @param Habitation Habitation à ajouter
    */
   public function ajouter($HabitationAAjouter) {
       
       try{
           
           $query =  $this->db->prepare("INSERT INTO habite " .
                   "(adresse_ligne1, localite_npa, personne_id, type ) VALUES(" .
                   ":adresse_ligne1, :localite_npa, :personne_id, :type)");

           $query->execute(array(
                   'localite_npa'  => $HabitationAAjouter->getLocalite_npa(),
                   'adresse_ligne1'=> $HabitationAAjouter->getAdresse_ligne1(),
                   'personne_id'   => $HabitationAAjouter->getPersonne_id(),
                   'type'          => $HabitationAAjouter->getType()
               ));

               $query->closeCursor();
       }
       catch(PDOException $e)
        {
            return new Message("Habitation non ajoutée:".$e->getMessage());
        }
               return $HabitationAAjouter;
   }
    /**
     * Methode permettant de modifier une habitation
     * @param Habitation habitation à modifier
     * @return Message 
     */
    public function modifier(Habitation $uneHabitation, $uneNouvelleHabitation){
        try{
           $query =  $this->db->prepare("UPDATE habite SET " .
                   "adresse_ligne1=:Nadresse_ligne1, localite_npa=:Nlocalite_npa, personne_id=:Npersonne_id, type=:Ntype WHERE adresse_ligne1=:adresse_ligne1, localite_npa=:localite_npa, personne_id=:personne_id;");

           $query->execute(array(
                   'localite_npa'   => $uneHabitation->getLocalite_npa(),
                   'adresse_ligne1' => $uneHabitation->getAdresse_ligne1(),
                   'personne_id'    => $uneHabitation->getPersonne_id(),
                   'Ntype'          => $uneNouvelleHabitation->getType(),
                   'Nlocalite_npa'  => $uneNouvelleHabitation->getLocalite_npa(),
                   'Nadresse_ligne1'=> $uneNouvelleHabitation->getAdresse_ligne1(),
                   'Npersonne_id'   => $uneNouvelleHabitation->getPersonne_id()
               ));
                   $this->db->query($query->queryString);

           
           }
                catch(PDOException $e)
        {
            return new Message("Habitation non modifiée:".$e->getMessage());
        }
               return $uneNouvelleHabitation;
    }
    /**
     * Methode permettant de supprimer une habitation
     * @param Habitation Habitation à supprimer
     * @return Message 
     */
    public function supprimer($uneHabitationASupprimer){
        try{
        $query = "DELETE FROM habite WHERE adresse_ligne1='".$uneHabitationASupprimer->getAdresse_ligne1()."' AND personne_id='".$uneHabitationASupprimer->getPersonne_id()."' AND localite_npa='".$uneHabitationASupprimer->getLocalite_npa().";";
                   
                $this->db->query($query);
                $message = new Message("Habitation supprimée");
                
                }
                catch(PDOException $e)
        {
            $message = new Message("Habitation non supprimée:".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Habitation habitationALister de recherche sous forme d'objet Habitation
     * @return un tableau d'objet Habitation
     */
    public function lister($habitationALister){
        try{
         

            $sql="SELECT * FROM habite ";
            $sql_Where="WHERE";
            if($habitationALister!=NULL)
            {
                if($habitationALister->getAdresse_ligne1()!=NULL)
                    $sql_Where.=" adresse_ligne1 = ".$habitationALister->getAdresse_ligne1()." AND ";
                if($habitationALister->getLocalite_npa()!=NULL)
                    $sql_Where.=" localite_npa = '".$habitationALister->getAdresse_ligne1()."' AND ";
                if($habitationALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$habitationALister->getPersonne_id()."' AND ";
                if($habitationALister->getType()!=NULL)
                    $sql_Where.=" type LIKE '%".$habitationALister->getType()."%' AND ";
            }         
            
            $sql_Where = substr($sql_Where,0,-5); 
            $sql.=$sql_Where." ORDER BY localite_npa;";
            $lesHabitationsTrouvees=NULL;
            $uneHabitationLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $uneHabitationLue = new Habitation($row['adresse_ligne1'],$row['localite_npa'],$row['personne_id'],$row['type']);
                
                
                    $lesHabitationsTrouvees[]=$uneHabitationLue;
                    
            }       
            
        }
        catch(PDOException $e)
        {
            
            print($e->getMessage());
            $lesHabitationsTrouvees=NULL;
        }
       
        return $lesHabitationsTrouvees;
        
    }

  
}

?>
